# 读取文件的函数
def read_file(path):
    with open(path, mode="r", encoding="UTF-8") as f:
        return [line.rstrip() for line in f.readlines()]


# 统计学生的总分
def sum_score(scores):
    # 保存学号和分数
    id_and_sco = []

    # 1、取出学号和分数
    for score in scores:
        # 按照逗号切分
        split = score.split(",")
        id = split[0]  # 学号
        sco = int(split[-1])  # 分数

        id_and_sco.append((id, sco))

    # 2、计算总分
    sum_score_dict = {}

    # 循环学号和分数，计算总分
    for id, sco in id_and_sco:
        # 判断学号在字典中是否存在
        if id not in sum_score_dict:
            sum_score_dict[id] = sco
        else:
            sum_score_dict[id] = sum_score_dict[id] + sco

    # 返回结果
    return sum_score_dict


# 对分数排序
def sort_by_score(sum_score_list):
    # 复制列表
    copy_list = sum_score_list[:]

    # 外层循环一次确定一个元素
    for i in range(len(copy_list) - 1):
        # 内层循环用于比较相邻的两个元素
        for j in range(len(copy_list) - (i + 1)):
            # 比较相邻两个位置
            if copy_list[j][1] < copy_list[j + 1][1]:
                # 交换位置
                copy_list[j], copy_list[j + 1] = copy_list[j + 1], copy_list[j]

    return copy_list


# 保存结果
def to_file(sort_sum_score, path):
    with open(path, mode="w", encoding="Utf-8") as file:
        for id, sco in sort_sum_score:
            file.write("{}\t{}\n".format(id, sco))


if __name__ == '__main__':
    # 1、读取分数表
    scores = read_file("../../data/score.txt")

    # 2、统计学生额总分
    sum_score_dict = sum_score(scores)

    # 将字典转换成列表，字典不能排序
    sum_score_list = list(sum_score_dict.items())

    # 3、对结果排序
    sort_sum_score = sort_by_score(sum_score_list)

    # 4、将结果保存到文件
    to_file(sort_sum_score, "../../data/sum_score.txt")
